#include <iostream>
#include <string>

using namespace std;

/*
普通函数 和 模板函数 重载   如果 匹配 普通函数 调用普通函数 

*/


// T 模板类型    int  double
template <class T>
void Swap(T & val_1 , T & val_2)
{
    T temp = val_1;
    val_1 = val_2;
    val_2 = temp;

    cout << "模板函数" << endl;
}

// 重载普通函数
void Swap(int & val_1 , int & val_2)
{
    int temp = val_1;
    val_1 = val_2;
    val_2 = temp;

    cout << "普通函数" << endl;
}

// 重载模板函数   按数量重载
template <class T>
void Swap(T & val_1 , T & val_2 , T & val_3)
{
    T temp = val_1;
    val_1 = val_2;
    val_2 = temp;

    cout << "重载模板函数 按数量重载" << endl;
}

// 重载模板函数   按类型重载  不推荐使用这个，会有二义性
template <class T , class A>
void Swap(T & val_1 , T & val_2 , A & val_3)
{
    T temp = val_1;
    val_1 = val_2;
    val_2 = temp;

    cout << "重载模板函数 按类型重载" << endl;
}

// T 
template <class T>
void Show(T val_1 , T val_2)
{
    cout << "val_1 = " << val_1 <<endl;
    cout << "val_2 = " << val_2 <<endl;
}


//T 可以对传入的参数 进行推到

int main(int argc, char const *argv[])
{
    int n_1 = 90;
    int n_2 = 70;
    int n_3 = 88;
    Swap<>(n_1 , n_2);//调用函数模板
    Show(n_1 , n_2);
    

    return 0;
}